10 CLS
20 KEY OFF
30 PRINT "NUMERIC BASE CONVERSION"
40 PRINT
50 N$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
60 REM  -- VARIABLE 'M' IS THE HIGHEST
70 REM  -- BASE YOU MAY CONVERT FROM / TO
80 M=LEN(N$)
90 PRINT "FROM BASE (0 TO END) ";
100 INPUT B1
110 REM  -- END PROGRAM?
120 IF B1=0 THEN 550
130 REM  -- TEST FOR VALID INPUT BASE
140 IF B1>1 THEN 170
150 PRINT "BASES 2 THROUGH";M;"ONLY. SELECT AGAIN. "
160 GOTO 90
170 IF B1>M THEN 150
180 PRINT "TO BASE ";
190 INPUT B2
200 IF B2=0 THEN 90
210 REM  -- TEST FOR VALID OUTPUT BASE
220 IF B2>1 THEN 250
230 PRINT "BASES 2 THROUGH";M;"ONLY. SELECT AGAIN."
240 GOTO 180
250 IF B2>M THEN 230
260 PRINT "VALUE ";
270 INPUT V$
280 IF V$="0" THEN 180
290 REM  -- FIRST, CONVERT INPUT VALUE TO BASE 10
300 L=LEN(V$)
310 D=0:BAD=0
320 FOR I=1 TO L
330 FOR J=1 TO B1
340 IF MID$(V$,I,1)>MID$(N$,B1,1) THEN BAD=-1
350 IF MID$(N$,J,1)<>MID$(V$,I,1) THEN 370
360 D=D+INT((J-1)*(B1^(L-I))+.5)
370 NEXT J
380 NEXT I
390 IF BAD THEN 510
400 REM  -- NOW CONVERT BASE 10 VALUE TO
410 REM  -- DESIRED OUTPUT
420 O$=""
430 X=INT(((D/B2)-INT(D/B2))*B2+1.5)
440 O$=MID$(N$,X,1)+O$
450 D=INT(D/B2)
460 IF D>0 THEN 430
470 REM  -- OUTPUT THE RESULT
480 PRINT V$;" BASE";B1;"IS ";O$;" BASE";B2
490 REM  -- LOOP BACK TO ENTER ANOTHER VALUE
500 GOTO 260
510 PRINT "INVALID ENTRY:"
520 PRINT "THERE IS NO SUCH NUMBER '"V$"' (SIC) IN BASE"B1
530 PRINT
540 GOTO 90
550 END
